/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Empregado;

import TratamentoData.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author andrevieira
 */
public class Empregado implements Comparable<Empregado>, Serializable {

    private String cpf;
    private String nome;
    private String sexo;
    private BigDecimal salarioAtual;
    private Date dataNascimento;
    private Date dataAdmissao;
    private Date dataDesligamento ;

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public BigDecimal getSalarioAtual() {
        return salarioAtual;
    }

    public void setSalarioAtual(BigDecimal salarioAtual) {
        this.salarioAtual = salarioAtual;
    }

    public String getDataNascimento() {
        return Data.converteDataBrasil(dataNascimento);
    }

    public void setDataNascimento(String dataNascimento) throws ParseException {
        this.dataNascimento = Data.converteData().parse(dataNascimento);
    }

    public String getDataAdmissao() {
        return Data.converteDataBrasil(dataAdmissao);
    }

  
    
     public void setDataAdmissao(String dataAdmissao) throws ParseException {
        this.dataAdmissao = Data.converteData().parse(dataAdmissao);
    }

    public String getDataDesligamento() {
        return Data.converteDataBrasil(dataDesligamento);
    }

    public void setDataDesligamento(String dataDesligamento) throws ParseException {
        this.dataDesligamento = Data.converteData().parse(dataDesligamento);
    }

    public void setDataDesligamento() {
        this.dataDesligamento = null;
    }

    // Construtor que inclui dataDesligamento
    public Empregado(String cpf, String nome, String sexo, String dataNascimento, String dataAdmissao, double salarioAtual, String dataDesligamento) {
        try {

            this.cpf = cpf;
            this.nome = nome;
            this.sexo = sexo;
            this.dataNascimento = Data.converteData().parse(dataNascimento);
            this.dataAdmissao = Data.converteData().parse(dataAdmissao);
            this.salarioAtual = BigDecimal.valueOf(salarioAtual);
            this.dataDesligamento = Data.converteData().parse(dataDesligamento);

        } catch (ParseException ex) {
            Logger.getLogger(Empregado.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    // Construtor que não inclui dataDesligamento
    public Empregado(String cpf, String nome, String sexo, String dataNascimento, String dataAdmissao, double salarioAtual) {
        try {

            this.cpf = cpf;
            this.nome = nome;
            this.sexo = sexo;
            this.dataNascimento = Data.converteData().parse(dataNascimento);
            this.dataAdmissao = Data.converteData().parse(dataAdmissao);
            this.salarioAtual = BigDecimal.valueOf(salarioAtual);
            
        } catch (ParseException ex) {
            Logger.getLogger(Empregado.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public Empregado() {
    }

    @Override
    public int compareTo(Empregado o) {
        if (nome.compareTo(o.nome) == 0) {
            return cpf.compareTo(o.cpf);
        } else {
            return nome.compareTo(o.nome);
        }
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        Empregado outroEmp = (Empregado) obj;
        return cpf.equals(outroEmp.cpf);
    }

    @Override
    public int hashCode() {
        return cpf.hashCode() + nome.hashCode();
    }
}